#ifndef __INA226_H_
#define __INA226_H_

#define INA226_CONFIG          0x00 // Configuration Register (R/W)初始值4127
#define INA226_SHUNTV          0x01 // Shunt Voltage (R)初始值0，分流电压测量值
#define INA226_BUSV            0x02 // Bus Voltage (R)初始值0，总线电压测量值
#define INA226_POWER           0x03 // Power (R)初始值0，输出功率测量值
#define INA226_CURRENT         0x04 // Current (R)初始值0，分流电阻电流计算值
#define INA226_CALIB           0x05 // Calibration (R/W)，设置全量程和电流LSB
#define INA226_MASK            0x06 // Mask/Enable (R/W)，报警设置和转换准备标志
#define INA226_ALERTL          0x07 // Alert Limit (R/W)，报警阈值
#define INA226_MANUF_ID        0xFE // Manufacturer ID (R)，0x5449
#define INA226_DIE_ID          0xFF // Die ID (R),0x2260

#define INA226_GetShuntV()     INA226_GetReg(INA226_SHUNTV)
#define INA226_GetBusVReg()    INA226_GetReg(INA226_BUSV)
#define INA226_GetPowerReg()   INA226_GetReg(INA226_POWER)
#define INA226_GetCurrentReg() INA226_GetReg(INA226_CURRENT)

#define BUFFER_SIZE            10

typedef struct {
    int32_t shuntV;                       // 采样的电阻上的压降
    uint16_t voltage;                     // 电压
    int16_t current;                     // 电流
    uint16_t power;                       // 功率
    int32_t energy;                      // 能量
    uint16_t max_voltage;                 // 最大电压
    uint16_t max_current;                 // 最大电流
    uint16_t max_power;                   // 最大功耗
    int16_t raw_shuntV;                   // 压降原始值
    uint16_t raw_voltage;                 // 电压原始值
    int16_t raw_current;                 // 电流原始值
    uint32_t raw_power;                   // 功率原始值
    uint16_t voltage_buffer[BUFFER_SIZE]; // 电压缓冲区
    uint16_t current_buffer[BUFFER_SIZE]; // 电流缓冲区
} INA226_Data;

extern INA226_Data sensor_data;

void INA226_init(void);
uint16_t INA226_GetReg(uint8_t RegAddr);

// INA226数据整体更新
void INA226_SensorUpdate(void);

// 仅使用了获取电压电流功率3个功能
// float INA226_GetBusV(void);
// float INA226_GetCurrent(void);
// float INA226_GetPower(void);

#endif /* INC_IIC_INA226_H_ */
